package com.yidu.springbootdemo.permission.action;

import com.yidu.springbootdemo.permission.action.vo.TmoduleVo;
import com.yidu.springbootdemo.permission.action.vo.TuserVo;
import com.yidu.springbootdemo.permission.domain.Tuser;
import com.yidu.springbootdemo.permission.service.TmoduleService;
import com.yidu.springbootdemo.permission.service.TuserService;
import com.yidu.springbootdemo.permission.tools.Messages;
import com.yidu.utils.FileTools;
import com.yidu.utils.RedisUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.*;

@Controller
@RequestMapping("/Tuser")
public class TuserController {
	@Resource
	TuserService tuserService;
	
	@Resource
	TmoduleService tmoduleService;

	@Resource
	FileTools fileTools;

	@Resource
	RedisUtil redisUtil;

	
	//@Resource
	//TmoduleService tmoduleService;
	
	 @RequestMapping("/login")
     @ResponseBody
	    public Messages login(String userName, String userPassword,HttpServletRequest request) {
	 	 Messages msg = new Messages();
	 	 //根据界面传过来的 用户名和密码 去 数据库里面查找
         Tuser us = tuserService.findUser2(userName,userPassword);
         //如果 查的到 就成功 将 对象加入到session中 否则就是失败
         if(us == null){
             msg.setStatus(0);
             msg.setMsg("登录失败！");
         }else{
             msg.setStatus(1);
             msg.setMsg("登录成功！");
             request.getSession().setAttribute("user",us);

         }
         return msg;
	    }

	 @RequestMapping("findByUser")
	 @ResponseBody
	 public Map<String,Object> selectAll(HttpServletRequest request) {
		HttpSession session = request.getSession();
		//得到session 中 的对象 user
     	Tuser user1 = (Tuser)session.getAttribute("user");
     	// 如果对象为空就返回
     	if(user1 == null){
     	    return null;
        }
     	//根据 对象的名字和 密码 查所对应的 用户角色 , 角色模块
     	List<TmoduleVo> list = tmoduleService.findByUser(user1.getUserName(),user1.getUserPassword());
		//定义2个新的 list集合
     	List<TmoduleVo> list2 = new ArrayList<TmoduleVo>();
     	List<TmoduleVo> list3 = new ArrayList<TmoduleVo>();
     	//循环 遍历
     	for (TmoduleVo tmoduleVo : list) {
     		//如果 模块表中的 父id字段 不为空 ,则将他加入到 list2集合中 否则加入到list3集合中
			if(!"".equals(tmoduleVo.gettMModId()) && tmoduleVo.gettMModId()!=null) {
				list2.add(tmoduleVo);
			}else {
				list3.add(tmoduleVo);
			}
		}
     	//定义map 集合  将 list2 son  list3 fa 分别加入到map集合中
     	Map<String, Object> map = new HashMap<String, Object>();
     	map.put("father", list3);
     	map.put("son", list2);
     	return map;
	 }

	/**
	 *  可以在html页面调用此方法得到登录的用户 个人信息
	 * @param request
	 * @return
	 */
	 @RequestMapping("/getUs")
	 @ResponseBody
	 public Tuser getUser(HttpServletRequest request){
		Tuser user = (Tuser) request.getSession().getAttribute("user");
		return user;
	 }

	/**
	 *  测试图片上传
	 * @param request
	 * @return
	 */
	@RequestMapping("/getImg")
	@ResponseBody
	public Map<String,Object> getImg(@RequestParam(value = "file", required = false) MultipartFile file, HttpServletRequest request) throws IOException {
		if(file == null){
		}
		String path = fileTools.saveFile("userUpdate",file);
		Map<String,Object> map = new HashMap<>();
		map.put("code", 0);
		map.put("msg", "");
		map.put("src1",path);
		return map;
	}

	/**
	 * 用户自主修改界面
	 * @param imageOne
	 * @param user
	 * @return
	 */
	@RequestMapping("/addOrup")
	@ResponseBody
	public Messages addOrup(String imageOne, TuserVo user ,HttpServletRequest request){
		Messages msg = new Messages();
		//如果图片不为空 就加入图片
		if(!StringUtils.isEmpty(imageOne)){
			user.setUserPhoto(imageOne);
		}
		Tuser user1 = (Tuser) request.getSession().getAttribute("user");
		user.setUserId(user1.getUserId());
		Tuser us = new Tuser();
		BeanUtils.copyProperties(user, us);//转换
		tuserService.update(us);//调用 tuser update方法
		request.getSession().invalidate();//清除session
		//msg 成功
		msg.setMsg("成功");
		msg.setStatus(1);
		redisUtil.deleteByPrex("ours"); //删除所有的缓存
		return msg;
	}

	/**
	 * 查询是否已经登录
	 * @param session
	 * @return
	 */
	@RequestMapping("/findModByManager")
	@ResponseBody
	public Tuser findModByManager(HttpSession session) {

		Tuser man = (Tuser) session.getAttribute("user");
		if(man==null){
			man = new Tuser();
			man.setUserId("0");
			man.setUserName("请重新登录");
		}
		return man;
	}


	/**
	 * 退出系统清除session
	 * @param session
	 * @return
	 */
	@RequestMapping("/removeSession")
	@ResponseBody
	public Messages removeSession(HttpSession session) {
		session.invalidate();
		Messages msg  = new Messages();
		msg.setMsg("成功");
		msg.setStatus(1);
		return msg;
	}
}